package com.android.kotlincoroutinemvvmdemo.contentprovider

import android.content.Context
import android.database.DatabaseErrorHandler
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteDatabase.CursorFactory
import android.database.sqlite.SQLiteOpenHelper
import android.util.Log

class GohiSqliteHelper(
    context: Context,
    name: String?,
    factory: CursorFactory? = null,
    version: Int,
    minimumSupportedVersion: Int = 0,
    errorHandler: DatabaseErrorHandler?
) : SQLiteOpenHelper(context, name, factory, version) {

    /*
    * SQLite采用的是动态数据类型，会根据存入值自动判断。SQLite具有以下五种数据类型：

      1.NULL：空值。
      2.INTEGER：带符号的整型，具体取决有存入数字的范围大小。
      3.REAL：浮点数字，存储为8-byte IEEE浮点数。
      4.TEXT：字符串文本。
      5.BLOB：二进制对象。

      常用的数据类型：

         BLOB                    none                   空
         NONE                    none                   空

         BIGINT                  int                    整型
         INTEGER                 integer                整型
         INT                     int                    整型

         DOUBLE                  double                 浮点型
         REAL                    real                   浮点型

         NUMERIC                 numeric                精确数值型，numeric与decimal相同
         DECIMAL(p,s)            decimal                精确数值型，p是精确值,s是小数位数

         BOOLEAN                 bool                   布尔类型

         STRING                  string                 字符串类型
         TEXT                    text                   字符串类型
         VARCHAR                 varchar                字符串类型
         CHAR                    char                   字符串类型

         DATA                    data                   时间类型，以 YYYY-MM-DD 格式返回日期
         TIME                    time                   时间类型，以 HH:MM:SS 格式返回时间
         DATETIME                datetime               时间类型，以 YYYY-MM-DD HH:MM:SS 格式返回
    * */

    override fun onCreate(db: SQLiteDatabase?) {
        DBUpdateHelper.updateDB0(db)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        Log.d("GohiSqliteHelper","version:${db?.version}")
        //循环遍历版本,主要是为了兼容处理.
        for (i in oldVersion..newVersion) {
            when (i) {
                SqlConstant.INIT_VERSION -> {
                    DBUpdateHelper.updateDB0(db)
                }
                SqlConstant.UPDATE_VERSION1 -> {
                    DBUpdateHelper.updateDB1(db)
                }
                else -> {}
            }
        }
    }

}